package com.itheima.reggie.controller;


import com.itheima.reggie.common.R;
import com.itheima.reggie.dto.SetmealDto;
import com.itheima.reggie.entity.Page;
import com.itheima.reggie.entity.SetmealDish;
import com.itheima.reggie.service.SetmealDtoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

@RestController
@RequestMapping("setmeal")
public class SetmealController {

    @Autowired(required = false)
    private SetmealDtoService setmealDtoService;


    /**
     * 新增套餐菜品
     * @param setmealDto
     * @param session
     * @return
     */
    @PostMapping
    public R<String> addSetmeal(@RequestBody SetmealDto setmealDto, HttpSession session){
        //获取登录信息
        Long id = (Long) session.getAttribute("employee");
        setmealDto.setCreateUser(id);
        setmealDto.setUpdateUser(id);
        setmealDtoService.addSetmealDto(setmealDto);
        return R.success("");
    }

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("page")
    public R<Page<SetmealDto>> findAllByPage(Integer page,Integer pageSize,String name){
        Page<SetmealDto> setmealDtoPage = setmealDtoService.findAllByName(page, pageSize, name);
        return R.success(setmealDtoPage);
    }

    /**
     * 数据回显：显示套餐里面的菜品
     * @param id
     * @return
     */
   @GetMapping("/{id}")
    public R<SetmealDto> findSetmealDish(@PathVariable Long id){
       SetmealDto setmealDto = setmealDtoService.selectSetmealDtlAndSetmealDishById(id);
       return R.success(setmealDto);
    }

    /**
     * 根据ids修改套餐状态:禁用
     * @param ids
     * @return
     */
    @PostMapping("/status/0")
    public R<String > upStatus(@RequestParam List<Long> ids){

        setmealDtoService.updateStatus(ids);
        return R.success("");
    }

    /**
     * 根据ids修改套餐状态：启用
     * @param ids
     * @return
     */
    @PostMapping("/status/1")
    public R<String > upStatusInUse(@RequestParam List<Long> ids){

        setmealDtoService.updateStatusInUse(ids);
        return R.success("");
    }

    /**
     * 批量删除
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> deleteByIds(Long[] ids){
        setmealDtoService.deleteByIds(ids);
        return R.success("");
    }

    /**
     * 修改套餐和套餐菜品
     * @param setmealDto
     * @param session
     * @return
     */
    @PutMapping
    public R<String> updateSetmealDto(@RequestBody SetmealDto setmealDto,HttpSession session){
        Long id = (Long) session.getAttribute("employee");
        setmealDto.setUpdateUser(id);
        setmealDtoService.updateSetmealDto(setmealDto);
        return R.success("");
    }

    /**
     * 根据分类ID查询套餐列表
     * @param categoryId
     * @param status
     * @return
     */
    @Cacheable(value = "setmealCache",key = "#categoryId+'_'+#status")//在方法执行前，spring先去缓存中查看是否有数据，如果有数据，则直接返回缓存数据，若没有数据，调用方法将返回值放到缓存中
    @GetMapping("list")
    public R<List<SetmealDto>> list(Long categoryId,Integer status){
        List<SetmealDto> setmealDtoList = setmealDtoService.findSetmealDtoByCategoryId(categoryId, status);
        return R.success(setmealDtoList);
    }

    @GetMapping("/dish/{id}")
    public R<SetmealDto> dishList(@PathVariable Long id){
        //根据套餐Id获取套餐菜品
        SetmealDto setmealDto = setmealDtoService.findSetmealDishBySetmealId(id);
        return R.success(setmealDto);
    };
}
